/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package admin;

import bazy.HibernateUtil;
import bazy.LogiZmian;
import java.io.Serializable;
import java.util.List;
import javax.inject.Named;
import javax.enterprise.context.RequestScoped;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.criterion.Order;

/**
 * Komponent zarządzający do obslugi okna przeglądania logów
 * @author Grzesiek
 */
@Named(value = "logKontroler")
@RequestScoped
public class LogKontroler implements Serializable {

    private Session session;
    private int max_wynikow = 5;
    private String akcja;
    private int id_zam;
    private List<LogiZmian> lista_logow = null;

    /** Creates a new instance of LogKontroler */
    public LogKontroler() {
    }

    public String getAkcja() {
        return akcja;
    }

    public void setAkcja(String akcja) {
        this.akcja = akcja;
    }

    public int getMax_wynikow() {
        return max_wynikow;
    }

    public void setMax_wynikow(int max_wynikow) {
        this.max_wynikow = max_wynikow;
    }

    public int getId_zam() {
        return id_zam;
    }

    public void setId_zam(int id_zam) {
        this.id_zam = id_zam;
    }

    public List<LogiZmian> getLista_logow() {
        return lista_logow;
    }


    public boolean jestLogTabela() {
        if (lista_logow == null) {
            return false;
        }
        if (lista_logow.isEmpty()) {
            return false;
        }
        return true;
    }

    /**
     * wyświetlenie logów w dla zadanego zamówienia
     * @param id_zam id zamówienia dla którego pokazać logi
     */
    private void wczytajLogiDoZamowienia(int id_zam) {
        session = HibernateUtil.getSessionFactory().openSession();
        org.hibernate.Transaction tx = session.beginTransaction();
        Query query = session.createQuery("from LogiZmian lz where lz.zamowienia.idzamowienia=" + id_zam + "order by lz.data desc");
        lista_logow = (List<LogiZmian>) query.list();
        tx.commit();
    }

    /**
     * Wyswietlenie najświeższych logów
     * @param max liczba ile ostatnich logów pokazać
     */

    private void wczytajMaxLogi(int max) {

        session = HibernateUtil.getSessionFactory().openSession();
        org.hibernate.Transaction tx = session.beginTransaction();
        Criteria criteria = session.createCriteria(LogiZmian.class);

        criteria.setMaxResults(max);
        criteria.addOrder(Order.desc("data"));

        lista_logow = (List<LogiZmian>) criteria.list();
        tx.commit();
    }

     /**
     * Inicjalizacja strony, w przypadku wystąpienia parametrów widoku, odpowiednia ich obsługa.
     */
    public void inicjalizuj() {

        if (akcja == null) {

            return;
        }
        if (akcja.equals("ONE")) {
            wczytajLogiDoZamowienia(id_zam);
        } else if (akcja.equals("ALL")) {
            wczytajMaxLogi(max_wynikow);
        }
    }
    /**
     * Zamknięcie sesji do bazy.
     */
    public void zakoncz() {
        if (session != null) {
            session.close();
        }
    }
}
